package com.example.validdemo.util;

import cn.hutool.core.util.StrUtil;

import java.util.regex.Matcher;
import java.util.regex.Pattern;


/**
 * @author Bx_Hu
 */
public class PatternUtil {

    /**
     * 车牌号正则
     */
    public static final String REG_LICENCE_PLATE = "^(?:[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领 A-Z]{1}[A-HJ-NP-Z]{1}(?:(?:[0-9]{5}[DF])|(?:[DF](?:[A-HJ-NP-Z0-9])[0-9]{4})))|(?:[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领 A-Z]{1}[A-Z]{1}[A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9 挂学警港澳]{1})$";

    /**
     * 身份证匹配正则 大小写,字符数字
     */
    public static final String REG_IDENTITY_CARD = "^[1-9]\\d{5}(?:18|19|20)\\d{2}(?:0\\d|10|11|12)(?:0[1-9]|[1-2]\\d|30|31)\\d{3}[\\dXx]$";

    /**
     * 用户名匹配正则
     */
    public static final String REG_USERNAME = "^[a-zA-Z0-9_\\u4e00-\\u9fa5]{1,16}$";
    /**
     * 密码匹配正则
     */
    public static final String REG_PASSWORD = "^\\S*(?=\\S{6,})(?=\\S*\\d)(?=\\S*[A-Z])(?=\\S*[a-z])(?=\\S*[!@#$%^&*? ])\\S*$";
    /**
     * 手机匹配正则
     */
    public static final String REG_MOBILE = "^[1][3,4,5,6,7,8,9][0-9]{9}$";

    /**
     * 邮箱匹配正则
     */
    public static final String REG_EMAIL = "^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$";

    /**
     * 由字母、数字、下划线、中文组成，不能超过16位
     */
    private static final Pattern pUsername = Pattern.compile(REG_USERNAME);

    /**
     * 由字母、数字、下划线、中文组成，不能超过16位
     */
    private static final Pattern P_PASSWORD = Pattern.compile(REG_PASSWORD);

    /**
     * 由字母、数字、下划线、中文组成，不能超过16位
     */
    private static final Pattern P_IDENTITY_CARD = Pattern.compile(REG_IDENTITY_CARD);
    /**
     * 由字母、数字、下划线、中文组成，不能超过16位
     */
    private static final Pattern P_LICENCE_PLATE = Pattern.compile(REG_LICENCE_PLATE);


    /**
     * 普通用户11位手机号
     * 10、11、12开头的号码已分配给特定机构
     */
    private static final Pattern pMobile = Pattern.compile(REG_MOBILE);

    /**
     * 邮箱
     * http://emailregex.com/
     */
    private static final Pattern pEmail = Pattern.compile(REG_EMAIL);

    /**
     * 车牌号正则
     */
    private static final Pattern pLicencePlate = Pattern.compile(REG_LICENCE_PLATE);

    /**
     * 校验用户名格式
     * @param v 校验的字符串
     * @return 是否符合校验
     */
    public static boolean username(String v) {

        if (StrUtil.isBlank(v)) {
            return false;
        }
        Matcher m = pUsername.matcher(v);
        if (m.matches()) {
            return true;
        }
        return false;
    }

    /**
     * 校验手机号格式
     * @param v 校验的字符串
     * @return 是否符合校验
     */
    public static boolean mobile(String v) {

        if (StrUtil.isBlank(v)) {
            return false;
        }
        Matcher m = pMobile.matcher(v);
        if (m.matches()) {
            return true;
        }
        return false;
    }

    /**
     * 校验手机号格式
     * @param v 校验的字符串
     * @return 是否符合校验
     */
    public static boolean email(String v) {

        if (StrUtil.isBlank(v)) {
            return false;
        }
        Matcher m = pEmail.matcher(v);
        if (m.matches()) {
            return true;
        }
        return false;
    }
    /**
     * 校验车牌号格式
     * @param v 校验的字符串
     * @return 是否符合校验
     */
    public static boolean licencePlate(String v) {

        if (StrUtil.isBlank(v)) {
            return false;
        }
        Matcher m = pLicencePlate.matcher(v);
        if (m.matches()) {
            return true;
        }
        return false;
    }



}
